/** 
  ******************************************************************************
  * @file    main.c
  * @author  SJU
  * @version V1.0
  * @date    2025-08
  * @brief   4位LED模块应用函数接口
 ******************************************************************************
  * @attention
  * 实验平台:SJU积木式单片机学习套件 
 ******************************************************************************
 **/

#include "bsp_4led.h"

void LED_GPIO_Config(void)
{
		/* 定义GPIO初始化结构体变量，用于配置GPIO引脚的工作参数 */
		GPIO_InitTypeDef GPIO_InitStructure;

		/* 使能GPIOC外设时钟，这是控制LED1、LED2、LED3的必要步骤，时钟使能后才能配置和使用这些GPIO引脚 */
		RCC_APB2PeriphClockCmd(LED1_GPIO_CLK, ENABLE);
		/* 使能GPIOB外设时钟，这是控制LED4的必要步骤，LED4位于GPIOB端口，需要单独使能其时钟 */
		RCC_APB2PeriphClockCmd(LED4_GPIO_CLK, ENABLE);

		/* 配置GPIO初始化结构体：设置要初始化的引脚为LED1、LED2和LED3对应的引脚（PC13、PC14、PC15） */
		GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN | LED2_GPIO_PIN | LED3_GPIO_PIN;
		/* 设置GPIO工作模式为推挽输出模式，这种模式可以提供较强的驱动能力，适合驱动LED */
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		/* 设置GPIO输出速度为50MHz，这是STM32 GPIO的最高速度，适合用于需要快速响应的外设如LED */
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		/* 初始化GPIOC端口的指定引脚（PC13、PC14、PC15），应用上述配置参数 */
		GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);

		/* 修改GPIO初始化结构体中的引脚设置，现在只配置LED4对应的引脚（PB5） */
		GPIO_InitStructure.GPIO_Pin = LED4_GPIO_PIN;
		/* 初始化GPIOB端口的指定引脚（PB5），应用上述配置参数（推挽输出、50MHz速度） */
		GPIO_Init(LED4_GPIO_PORT, &GPIO_InitStructure);

		/* 将所有LED设置为关闭状态：LED1关闭、LED2关闭、LED3关闭、LED4关闭，作为初始默认状态 */
		LED1_OFF();
		LED2_OFF();
		LED3_OFF();
		LED4_OFF();
}

void LED3_Toggle(void)  //反转LED3(了解)
{
    GPIO_WriteBit(LED3_GPIO_PORT, LED3_GPIO_PIN,
        (GPIO_ReadOutputDataBit(LED3_GPIO_PORT, LED3_GPIO_PIN) == Bit_SET) ? Bit_RESET : Bit_SET);
}
